package com.librelato.persistencia;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

import com.librelato.bean.AcessorioBean;
import com.librelato.bean.ClienteBean;
import com.librelato.bean.DescritivoProdutoPedidoBean;
import com.librelato.bean.EmpresaBean;
import com.librelato.bean.HistoricoPedidoVendaBean;
import com.librelato.bean.ItemPedidoVendaBean;
import com.librelato.bean.OrdemProducaoBean;
import com.librelato.bean.PedidoVendaBean;
import com.librelato.bean.ProdutoBean;
import com.librelato.bean.RepresentanteBean;
import com.librelato.bean.UsuarioBean;
import com.librelato.persistencia.config.SQLConfiguracao;
import com.librelato.persistencia.enums.EnumCondicao;
import com.librelato.persistencia.interfaces.IPedidoVendaDao;
import com.librelato.util.Ferramentas;

public class PedidoVendaDao<P extends PedidoVendaBean> extends DaoGenerico<P>
		implements IPedidoVendaDao<P> {

	@Override
	public List<PedidoVendaBean> buscaPedidos(Map<String, String> param)
			throws Exception {
		List<PedidoVendaBean> pedidos = new ArrayList<PedidoVendaBean>();
		List<ItemPedidoVendaBean> itens = new ArrayList<ItemPedidoVendaBean>();
		PedidoVendaBean pedido = null;
		ItemPedidoVendaBean itemPedido = null;
		ProdutoBean produto = null;
		OrdemProducaoBean ordemProd = null;
		RepresentanteBean representante = null;
		AcessorioBean acessorio = null;
		ResultSet rs2 = null;
		int psIndex = 1;
		try {
			conn = GerenciadorConexao.getConexao();
			boolean pvAtual = true;
			String sqlFilial = "";
			if (param.get("NUMDE") != null && param.get("NUMDE") != null
					&& !"".equals(param.get("NUMDE"))
					&& param.get("NUMDE").equals(param.get("NUMATE"))) {

				if (param.get("OPCAOFILIAL") != null
						&& "FATURAMENTO".equals(param.get("OPCAOFILIAL"))) {

					sqlFilial = "WHERE C5_FILIAL = ? ";
				} else {
					sqlFilial = "WHERE C5_FILPROD = ? ";
				}
				query = "SELECT C5_NUM FROM SC5010(NOLOCK),SC6010(NOLOCK) " + sqlFilial
						+ "AND C5_PVANTER = ? " 
						+ "AND SC5010.D_E_L_E_T_ <> '*' "
						+ "AND C6_FILIAL = C5_FILIAL " 
						+ "AND C5_NUM = C6_NUM "
						+ "AND SC6010.D_E_L_E_T_ <> '*'"
						+ "AND C6_ITEM = '01'";
				ps = conn.prepareStatement(query);
				ps.setString(1, param.get("FILIAL"));
				ps.setString(2, param.get("NUMDE"));
				rs = ps.executeQuery();
				if (rs.next()) {
					pvAtual = false;
				}
			}
			super.fecharRecursos(ps, rs);
			query = "WITH PVRECUR(FILIAL,PV,PVANT) AS(SELECT FILIAL_AC,PV_AC,PVANTERIOR_AC "
					+ "FROM ACOMPANHAMENTOPV " + "WHERE 1=1";

			if (param.get("NUMDE") != null) {
				if (pvAtual) {
					query += " AND PV_AC >= ?";
				} else {
					query += " AND PVANTERIOR_AC >= ?";
				}
			}
			if (param.get("NUMATE") != null) {
				if (pvAtual) {
					query += " AND PV_AC <= ?";
				} else {
					query += " AND PVANTERIOR_AC <= ?";
				}
			}
			query += " UNION ALL SELECT A.FILIAL_AC,A.PV_AC,A.PVANTERIOR_AC "
					+ "FROM ACOMPANHAMENTOPV A, PVRECUR T "
					+ "WHERE T.PV = A.PVANTERIOR_AC "
					+ "AND T.FILIAL = A.FILIAL_AC) "
					+ "SELECT"
					+ " C6_ENTREG,C5_COMPLEM,C6_NSERIE,C6_CHASSIS,C6_OPC,C5_NUM,C5_FILIAL,C5_CLIENTE,A1_NOME,C5_EMISSAO,C6_PRODUTO,B1_DESC,ZPF_STATUS,C5_NOTA,"
					+ "ISNULL(C2_NUM,'--') AS C2_NUM,ISNULL(C2_ITEM,'--') AS C2_ITEM,ISNULL(C2_SEQUEN,'--') AS C2_SEQUEN "
					+ ",ISNULL(C2_FILIAL,'--') AS C2_FILIAL, ISNULL(C2_DATRF,'--') AS C2_DATRF,C5_PVANTER,B1_GRUPO,C6_CODPRJ,A3_COD,A3_NOME,ZPP_DATAC,ZPF_FILPRO "
					+ "FROM SC5010 C5(NOLOCK) " + "INNER JOIN SC6010(NOLOCK) "
					+ "ON C5_FILIAL = C6_FILIAL "
					+ "AND C6_ITEM = '01' "// + "AND C5_FILIAL = ? "
					+ "INNER JOIN ZPF010(NOLOCK) " + "ON ZPF_FILORI = C5_FILIAL "
					+ "AND ZPF_NUMERO = C5_NUM ";

			if (param.get("OPCAOFILIAL") != null
					&& "FATURAMENTO".equals(param.get("OPCAOFILIAL"))) {

				query += " AND ZPF_FILORI = ? ";
			} else {
				query += " AND ZPF_FILPRO = ? ";
			}
			query += "AND C5_NUM = C6_NUM " + "INNER JOIN SA3010(NOLOCK) "
					+ "ON A3_COD = C5_VEND2 " + "AND SA3010.D_E_L_E_T_ <> '*' "
					+ "INNER JOIN SB1010(NOLOCK) " + "ON B1_COD = C6_PRODUTO ";

			if (param.get("LINHA") != null) {
				query += "INNER JOIN SBM010(NOLOCK) " + "ON B1_GRUPO = BM_GRUPO "
						+ "AND SBM010.D_E_L_E_T_ <> '*' ";
				if ("I1".equals(param.get("LINHA"))) {
					query += "AND BM_GRUREL IN ('2000','3500','I1') ";
				} else {
					query += "AND BM_GRUREL IN ('1000','3000','I2') ";
				}
			}

			query += "INNER JOIN SA1010(NOLOCK) "
					+ "ON C5_CLIENTE = A1_COD "
					+ "AND C5_LOJACLI = A1_LOJA "
					+ "AND C5.D_E_L_E_T_ <> '*' "
					+ "AND SC6010.D_E_L_E_T_ <> '*' "
					+ "AND SB1010.D_E_L_E_T_ <> '*' "
					+ "AND ZPF010.D_E_L_E_T_ <> '*' "
					+ "OUTER APPLY (SELECT TOP 1 C2_PEDIDO, C2_NUM,C2_ITEM,C2_SEQUEN,C2_FILIAL,C2_DATRF FROM SC2010(NOLOCK) "
					+ "INNER JOIN ZPF010(NOLOCK) " 
					+ "ON ZPF_FILPRO = C2_FILIAL "
					+ "INNER JOIN SC5010(NOLOCK) " + "ON C5_NUM = C2_PEDIDO "
					+ "AND C5.C5_NUM = C5_NUM "
					+ "AND C5.C5_FILIAL = C5_FILIAL "
					+ "AND C5.C5_FILPROD = C2_FILIAL "
					+ "AND C2_LOCAL = '01' "
					+ "AND SC2010.D_E_L_E_T_ <> '*' "
					+ "AND SC5010.D_E_L_E_T_ <> '*' "
					+ "ORDER BY C2_EMISSAO DESC " + ") AS SC2 "

					/*
					 * + "LEFT JOIN SC2010 " + "ON ZPF_FILPRO = C2_FILIAL " +
					 * "AND C5_NUM = C2_PEDIDO " + "AND C2_LOCAL = '01' " +
					 * "AND SC2010.D_E_L_E_T_ <> '*' "
					 */
					+ "LEFT JOIN ZPP010(NOLOCK) " + "ON ZPP_FILIAL = ZPF_FILPRO "
					+ "AND ZPP_FILORI = ZPF_FILORI " + "AND ZPP_SETOR = '800' "
					+ "AND ZPF_NUMERO = ZPP_NUMERO "
					+ "AND ZPP010.D_E_L_E_T_ <> '*' ";

			query += "INNER JOIN PVRECUR " + "ON PVRECUR.PV = ZPF_NUMERO "
					// + "AND C5_PVANTER <> '' "
					+ "AND PVRECUR.PV = C5_NUM "
					+ "AND PVRECUR.FILIAL = C5_FILIAL";

			if (param.get("DATADE") != null) {
				query += " AND C5_EMISSAO >= ?";
			}
			if (param.get("DATAATE") != null) {
				query += " AND C5_EMISSAO <= ?";
			}
			// query +=
			// " INNER JOIN ZPF010 ON ZPF_FILORI = C5_FILIAL AND ZPF_NUMERO = C5_NUM AND C5_NUM = C6_NUM INNER JOIN SB1010 ON B1_COD = C6_PRODUTO INNER JOIN SA1010 ON C5_CLIENTE = A1_COD AND C5_LOJACLI = A1_LOJA AND SC5010.D_E_L_E_T_ <> '*' AND SC6010.D_E_L_E_T_ <> '*' AND SB1010.D_E_L_E_T_ <> '*'  AND ZPF010.D_E_L_E_T_ <> '*'  LEFT JOIN SC2010 ON ZPF_FILPRO = C2_FILIAL AND C5_NUM = C2_PEDIDO AND SC2010.D_E_L_E_T_ <> '*' ";
			query += " GROUP BY C6_ENTREG,C5_COMPLEM,C6_NSERIE,C6_CHASSIS,C6_OPC,C5_NUM,C5_FILIAL,C5_CLIENTE,A1_NOME,C5_EMISSAO,C6_PRODUTO,B1_DESC,ZPF_STATUS,C5_NOTA,C2_NUM,C2_ITEM,C2_SEQUEN,"
					+ "C2_FILIAL,C2_DATRF,C5_PVANTER,B1_GRUPO,C6_CODPRJ,A3_COD,A3_NOME,ZPP_DATAC,ZPF_FILPRO";
			query += " ORDER BY C5_NUM";
			ps = conn.prepareStatement(query);
			if (param.get("NUMDE") != null) {
				ps.setString(psIndex++, param.get("NUMDE"));
			}
			if (param.get("NUMATE") != null) {
				ps.setString(psIndex++, param.get("NUMATE"));
			}

			ps.setString(psIndex++, param.get("FILIAL"));

			if (param.get("DATADE") != null) {
				ps.setString(
						psIndex++,
						Ferramentas.formataData(
								Ferramentas.formataData(param.get("DATADE"),
										"dd/MM/yy").getTime(), "yyyyMMdd"));
			}
			if (param.get("DATAATE") != null) {
				ps.setString(
						psIndex++,
						Ferramentas.formataData(
								Ferramentas.formataData(param.get("DATAATE"),
										"dd/MM/yy").getTime(), "yyyyMMdd"));
			}
			rs = ps.executeQuery();

			while (rs.next()) {
				produto = new ProdutoBean();
				produto.setCodigo(rs.getString("C6_PRODUTO").trim());
				produto.setDescricao(rs.getString("B1_DESC").trim());
				produto.setGrupo(rs.getString("B1_GRUPO"));
				produto.setCodigoProjeto(rs.getString("C6_CODPRJ"));
				itemPedido = new ItemPedidoVendaBean();
				itemPedido.setProduto(produto);
				pedido = new PedidoVendaBean();
				pedido.setCliente(new ClienteBean(rs.getString("C5_CLIENTE")
						.trim(), rs.getString("A1_NOME").trim()));
				pedido.setDataEmissao(Ferramentas.formataData(
						rs.getString("C5_EMISSAO"), "yyyyMMdd"));
				if (rs.getString("C6_ENTREG") != null
						&& !"".equals(rs.getString("C6_ENTREG").trim())) {
					pedido.setDataEntrega(Ferramentas.formataData(
							rs.getString("C6_ENTREG"), "yyyyMMdd"));
				}
				if (rs.getString("ZPP_DATAC") != null) {
					pedido.setDataProgramacao(Ferramentas.formataData(
							rs.getString("ZPP_DATAC"), "yyyyMMdd"));
				}
				pedido.setFilial(new EmpresaBean(rs.getString("C5_FILIAL"),
						null));
				pedido.setFilialProd(new EmpresaBean(
						rs.getString("ZPF_FILPRO"), null));
				itens.add(itemPedido);
				pedido.setItemPedido(itens);
				pedido.setNumero(rs.getString("C5_NUM"));
				pedido.setStatus(rs.getString("ZPF_STATUS"));
				pedido.setNotaFiscal(rs.getString("C5_NOTA").trim());
				pedido.setAcessoriosOpcionais(rs.getString("C6_OPC"));
				pedido.setChassi(rs.getString("C6_CHASSIS"));
				pedido.setNumeroSerie(rs.getString("C6_NSERIE"));
				pedido.setCaracteristicaOpcional(rs.getString("C5_COMPLEM"));
				pedido.setListaAcesssoriosOpcionais(new ArrayList<AcessorioBean>());
				if (pedido.getAcessoriosOpcionais() != null) {
					String gropc = "";
					String itOpc = "";
					String opc = "";
					int totalString = pedido.getAcessoriosOpcionais().length();
					String ace = pedido.getAcessoriosOpcionais();
					int posicao = 0;
					query = "";
					for (int i = 0; i < totalString; i++) {
						if (ace.indexOf("/") != -1) {
							opc = ace.substring(posicao, ace.indexOf("/"))
									.trim();
							// totalString -= opc.length() + 3;
							ace = ace.substring(opc.length() + 3, ace.length());
							if (opc.trim().length() >= 3) {
								gropc = opc.substring(0, 3);
								itOpc = opc.substring(3, opc.length());
							}

							query += " SELECT * FROM SGA010 WHERE GA_GROPC = '"
									+ gropc + "' AND GA_OPC = '" + itOpc
									+ "' AND SGA010.D_E_L_E_T_ <> '*' UNION";

						} else {
							break;
						}
					}
					String[] comple = null;
					if (!query.equals("")) {
						query = query.substring(0, query.trim().length() - 5);
						ps = conn.prepareStatement(query);
						rs2 = ps.executeQuery();
						if (pedido.getCaracteristicaOpcional() != null
								&& !"".equals(pedido
										.getCaracteristicaOpcional().trim())
								&& !".".equals(pedido
										.getCaracteristicaOpcional().trim())) {
							comple = pedido.getCaracteristicaOpcional().split(
									"\\r");
						}
					}

					while (rs2 != null && rs2.next()) {
						acessorio = new AcessorioBean();
						acessorio.setGrupoOpc(rs2.getString("GA_GROPC"));
						acessorio.setGrupoOpc(rs2.getString("GA_OPC"));
						acessorio
								.setDescricaoGrupo(rs2.getString("GA_DESCGRP"));
						String adicional = "";
						if (comple != null) {
							for (int i = 0; i < comple.length; i++) {
								if (comple[i].length() > 1) {

									if ((rs2.getString("GA_GROPC") + rs2
											.getString("GA_OPC")).trim()
											.equals(comple[i].substring(0,
													comple[i].indexOf("\\")))) {
										adicional = " ("
												+ comple[i]
														.substring(
																comple[i]
																		.indexOf("\\") + 1,
																comple[i]
																		.trim()
																		.length())
												+ ")";
										break;
									}

								}
							}
							acessorio.setDescricaoOpc(rs2.getString(
									"GA_DESCOPC").trim()
									+ " " + adicional.trim());

							pedido.getListaAcesssoriosOpcionais()
									.add(acessorio);
						} else {
							acessorio.setDescricaoOpc(rs2.getString(
									"GA_DESCOPC").trim()
									+ " " + adicional.trim());
							pedido.getListaAcesssoriosOpcionais()
									.add(acessorio);
						}

					}

				}

				representante = new RepresentanteBean(rs.getString("A3_COD"),
						rs.getString("A3_NOME"));
				pedido.setRepresentante(representante);
				ordemProd = new OrdemProducaoBean();
				ordemProd.setFilial(new EmpresaBean(rs.getString("C2_FILIAL")
						.trim(), ""));
				ordemProd.setNumero(rs.getString("C2_NUM").trim());
				ordemProd.setItem(rs.getString("C2_ITEM").trim());
				ordemProd.setSequencia(rs.getString("C2_SEQUEN").trim());
				if (rs.getString("C2_DATRF") != null
						&& !"--".equals(rs.getString("C2_DATRF").trim())
						&& !"".equals(rs.getString("C2_DATRF").trim())) {
					ordemProd.setDataFim(Ferramentas.formataData(
							rs.getString("C2_DATRF"), "yyyyMMdd"));
				}
				pedido.setOrdemProd(ordemProd);
				if (!"".equals(rs.getString("C5_PVANTER").trim())) {
					pedido.setPvAlterado(true);
				} else {
					pedido.setPvAlterado(false);
				}
				pedidos.add(pedido);
				itens = new ArrayList<ItemPedidoVendaBean>();
			}

		} catch (Exception e) {
			throw e;
		} finally {
			super.fecharRecursos(ps, rs);
		}

		return pedidos;
	}

	@Override
	public List<HistoricoPedidoVendaBean> buscaHistoricoPedidoVenda(
			PedidoVendaBean pedido) throws Exception {
		List<HistoricoPedidoVendaBean> hists = new ArrayList<HistoricoPedidoVendaBean>();
		HistoricoPedidoVendaBean hist = null;
		String pvAnt = "";
		try {
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_historicos_pedido_venda");
			conn = GerenciadorConexao.getConexao();
			ps = conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			ps.setString(1, pedido.getFilial().getFilial());
			ps.setString(2, pedido.getNumero());
			rs = ps.executeQuery();

			while (rs.next()) {
				hist = new HistoricoPedidoVendaBean();
				hist.setCodigo(rs.getLong("IDACOMPANHA_AC"));
				hist.setFilOri(rs.getString("FILIAL_AC"));
				hist.setNumeroPvOp(rs.getString("PV_AC"));
				hist.setPosicao(rs.getString("POSICAO_AC"));
				hist.setDataEmissao(rs.getTimestamp("DATAEMISSAO_AC"));
				hist.setObservacao(rs.getString("OBSERVACAO_AC"));
				hist.setFilProd(rs.getString("FILPROD_AC"));
				hist.setStatus(rs.getString("STATUS_AC"));
				hist.setUsuario(rs.getString("USUARIO_AC"));
				hist.setPvAnterior(rs.getString("PVANTERIOR_AC"));
				hists.add(hist);
				if (rs.getString("PVANTERIOR_AC") != null
						&& !"".equals(rs.getString("PVANTERIOR_AC").trim())
						&& "".equals(pvAnt)) {
					pvAnt = rs.getString("PVANTERIOR_AC");
				}
				if (rs.next()) {
					rs.previous();
				} else {
					if (!"".equals(pvAnt)) {
						ps = conn.prepareStatement(query,
								ResultSet.TYPE_SCROLL_SENSITIVE,
								ResultSet.CONCUR_UPDATABLE);
						ps.setString(1, pedido.getFilial().getFilial());
						ps.setString(2, pvAnt);
						rs = ps.executeQuery();
						pvAnt = "";
					}
				}
			}

		} catch (Exception e) {
			throw e;
		}
		return hists;
	}

	public List<PedidoVendaBean> buscaPedidoPortalAntigo(
			Map<String, String> param) throws Exception {

		List<PedidoVendaBean> pedidos = new ArrayList<PedidoVendaBean>();
		List<ItemPedidoVendaBean> itens = new ArrayList<ItemPedidoVendaBean>();
		PedidoVendaBean pedido = null;
		ItemPedidoVendaBean itemPedido = null;
		ProdutoBean produto = null;
		List<HistoricoPedidoVendaBean> hists = new ArrayList<HistoricoPedidoVendaBean>();
		HistoricoPedidoVendaBean hist = null;
		OrdemProducaoBean ordemProd = null;
		boolean first = true;

		query = SQLConfiguracao.getInstance().getValor(
				"localiza_pedidos_portal_antigo");

		ps = conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE,
				ResultSet.CONCUR_UPDATABLE);
		ps.setString(1, param.get("FILIAL"));
		if (param.get("NUMPV") != null) {
			ps.setString(2, param.get("NUMDE"));
		}
		rs = ps.executeQuery();
		long idAc = 0;
		while (rs.next()) {
			if (first) {
				produto = new ProdutoBean();
				produto.setCodigo(rs.getString("B1_COD").trim());
				produto.setDescricao(rs.getString("B1_DESC").trim());
				itemPedido = new ItemPedidoVendaBean();
				itemPedido.setProduto(produto);
				pedido = new PedidoVendaBean();
				pedido.setCliente(new ClienteBean(rs.getString("C5_CLIENTE")
						.trim(), rs.getString("A1_NOME").trim()));
				pedido.setDataEmissao(Ferramentas.formataData(
						rs.getString("C5_EMISSAO"), "yyyyMMdd"));
				pedido.setFilial(new EmpresaBean(rs.getString("C5_FILIAL"),
						null));
				itens.add(itemPedido);
				pedido.setItemPedido(itens);
				pedido.setNumero(rs.getString("C5_NUM"));
				pedido.setNotaFiscal(rs.getString("C5_NOTA").trim());
				ordemProd = new OrdemProducaoBean();
				ordemProd.setFilial(new EmpresaBean(rs.getString("C2_FILIAL")
						.trim(), ""));
				ordemProd.setNumero(rs.getString("C2_NUM").trim());
				ordemProd.setItem(rs.getString("C2_ITEM").trim());
				ordemProd.setSequencia(rs.getString("C2_SEQUEN").trim());
				if (rs.getString("C2_DATRF") != null
						&& !"--".equals(rs.getString("C2_DATRF").trim())
						&& !"".equals(rs.getString("C2_DATRF").trim())) {
					ordemProd.setDataFim(Ferramentas.formataData(
							rs.getString("C2_DATRF"), "yyyyMMdd"));
				}
				pedido.setOrdemProd(ordemProd);
				pedido.setPvAlterado(false);
				pedidos.add(pedido);
				itens = new ArrayList<ItemPedidoVendaBean>();
				first = false;
			}

			hist = new HistoricoPedidoVendaBean();
			hist.setCodigo(idAc++);
			hist.setFilOri(rs.getString("C5_FILIAL"));
			hist.setPosicao(rs.getString("ZZB_DESCS"));
			hist.setNumeroPvOp(rs.getString("C5_NUM"));
			hist.setDataEmissao(Ferramentas.formataData(
					rs.getString("ZZD_DATAI"), "yyyyMMdd"));
			hist.setObservacao("--");
			hist.setFilProd(rs.getString("ZZD_FILIAL"));
			hist.setStatus(rs.getString("ZZB_DESCS"));
			hist.setUsuario("--");
			hist.setPvAnterior("--");
			hists.add(hist);
			if (rs.next()) {
				rs.previous();
			} else {
				rs.previous();
				pedidos.get(0).setStatus(rs.getString("ZZB_DESCS"));
				pedidos.get(0).setHistorico(hists);
				rs.next();
			}

		}

		return pedidos;

	}

	@Override
	public String procuraPorParam(String tabela, String campo, String valor,
			EnumCondicao condicao) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public P salvar(P p) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void excluir(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void editar(P p) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void preSalvar(P p) {
		// TODO Auto-generated method stub

	}

	@Override
	public byte[] imprimePedidoVenda(PedidoVendaBean pedido, String codRel,
			UsuarioBean usuario) throws Exception {

		List<DescritivoProdutoPedidoBean> listaDescritivo;
		List<AcessorioBean> listaAcessorio;
		String jasper = "";
		if (usuario.getSetor() != null
				&& "Comercial".equals(usuario.getSetor())) {
			jasper = Ferramentas.getDiretorioReal("/rel/PedidoVenda.jasper");
		} else {
			jasper = Ferramentas
					.getDiretorioReal("/rel/PedidoVenda_Sem_Valor.jasper");
		}
		String pedPdf = Ferramentas.getDiretorioReal("/rel/") + "\\pedidovenda"
				+ codRel + ".pdf";
		byte[] bytes = null;

		try {
			conn = GerenciadorConexao.getConexao();
			Map<String, Object> params = new HashMap<String, Object>();
			params.put("FILIAL", pedido.getFilial().getFilial());
			params.put("NUMEROPEDIDO", pedido.getNumero().trim());
			params.put("SUBREPORT_DIR", Ferramentas.getDiretorioReal("/rel/")
					+ "\\");
			DescritivoProdutoPedidoBean descritivo = null;
			listaDescritivo = new ArrayList<DescritivoProdutoPedidoBean>();
			listaAcessorio = new ArrayList<AcessorioBean>();
			query = SQLConfiguracao.getInstance().getValor(
					"localiza_descritivo_produto");
			ps = conn.prepareStatement(query);
			ps.setString(1, pedido.getItemPedido().get(0).getProduto()
					.getCodigo().substring(0, 7));
			ps.setString(2, pedido.getItemPedido().get(0).getProduto()
					.getCodigo().substring(0, 7));
			ps.setString(
					3,
					pedido.getItemPedido()
							.get(0)
							.getProduto()
							.getCodigo()
							.trim()
							.substring(
									7,
									pedido.getItemPedido().get(0).getProduto()
											.getCodigo().trim().length()));
			rs = ps.executeQuery();
			descritivo = new DescritivoProdutoPedidoBean();
			descritivo.setDescritivo("CÓDIGO DO PROJETO");
			descritivo.setCaracteristica("- "
					+ pedido.getItemPedido().get(0).getProduto()
							.getCodigoProjeto().trim());
			listaDescritivo.add(descritivo);
			descritivo = new DescritivoProdutoPedidoBean();
			descritivo.setDescritivo("PRODUTO");
			descritivo.setCaracteristica("- "
					+ pedido.getItemPedido().get(0).getProduto().getDescricao()
							.trim());
			listaDescritivo.add(descritivo);
			while (rs.next()) {
				descritivo = new DescritivoProdutoPedidoBean();
				descritivo.setCaracteristica(rs.getString("CARACTERISTICA"));
				descritivo.setDescritivo(rs.getString("DESCRITIVO"));
				listaDescritivo.add(descritivo);
			}

			AcessorioBean acessorio = null;
			listaAcessorio = pedido.getListaAcesssoriosOpcionais();
			if (pedido.getChassi() != null) {
				acessorio = new AcessorioBean();
				acessorio.setDescricaoGrupo("CHASSI");
				acessorio.setDescricaoOpc(pedido.getChassi().trim());
				listaAcessorio.add(acessorio);
			}
			if (pedido.getNumeroSerie() != null
					&& !"".equals(pedido.getNumeroSerie().trim())) {
				acessorio = new AcessorioBean();
				acessorio.setDescricaoGrupo("NÚMERO DE SÉRIE");
				acessorio.setDescricaoOpc(pedido.getNumeroSerie().trim());
				pedido.getListaAcesssoriosOpcionais().add(acessorio);
			}
			params.put("SUB_DATA_DESCRITIVO", listaDescritivo);
			params.put("SUB_DATA_ACESSORIO", listaAcessorio);
			JasperPrint print = JasperFillManager.fillReport(jasper, params,
					conn);
			JasperExportManager.exportReportToPdfFile(print, pedPdf);
			bytes = JasperExportManager.exportReportToPdf(print);

		} catch (Exception e) {
			throw e;
		} finally {
		}
		return bytes;
	}
}
